#include <stdio.h>
#include <pthread.h>

// 全局变量用于存储主线程退出值
int exit_value;
// 互斥锁确保对全局变量的安全访问
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
// 条件变量用于子线程等待主线程完成
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

// 子线程函数：等待主线程完成后获取退出值
void *child_thread(void *arg) {
    // 等待主线程发送信号
    pthread_mutex_lock(&mutex);
    pthread_cond_wait(&cond, &mutex);  // 阻塞等待条件变量
    pthread_mutex_unlock(&mutex);

    // 输出主线程的退出值
    printf("主线程的退出值为: %d\n", exit_value);
    return NULL;
}

// 主线程执行的函数：设置退出值并通知子线程
void main_thread_func() {
    // 模拟主线程工作，设置退出值
    exit_value = 100;
    printf("主线程执行完毕，即将退出\n");

    // 通知子线程：主线程已完成
    pthread_mutex_lock(&mutex);
    pthread_cond_signal(&cond);  // 发送信号唤醒子线程
    pthread_mutex_unlock(&mutex);
}

int main() {
    pthread_t child_tid;

    // 创建子线程
    if (pthread_create(&child_tid, NULL, child_thread, NULL) != 0) {
        perror("创建子线程失败");
        return 1;
    }

    // 执行主线程任务
    main_thread_func();

    // 等待子线程执行完毕
    if (pthread_join(child_tid, NULL) != 0) {
        perror("等待子线程失败");
        return 1;
    }

    // 清理资源
    pthread_mutex_destroy(&mutex);
    pthread_cond_destroy(&cond);
    return 0;
}